package lbframework.bean.consultaCampo;

import java.awt.Container;
import java.awt.event.FocusListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.sql.ResultSet;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.Vector;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import lbframework.bean.internalFrame.LBInternalFrame;
import lbframework.bean.panel.LBPanel;
import lbframework.classe.Conexao;
import lbframework.classe.Util;
import lbframework.classe.LBException;

public class LBConsultaCampo extends LBPanel {

    public static final int BOOLEAN = 1;
    public static final int DOUBLE = 2;
    public static final int INT = 3;
    public static final int DATA = 4;
    public static final int LONG = 5;
    public static final int STRING = 6;
    private String campoId = "id";
    private String campoDescricao = "descricao";
    private long codigoBarras = 0;
    private String tabela = "";
    private String filtro = "";
    private String tipo = "";
    private Vector<LBConsultaCampoRetorno> retorno = new Vector();
    private int columns = 0;
    //private String pesquisa = "";
    public final static String FORNECEDOR = "Fornecedor";
    public final static String CLIENTE_EVENTUAL = "Cliente Eventual";
    public final static String CLIENTE_PREFERENCIAL = "Cliente Preferencial";
    public final static String MOTORISTA = "Motorista";
    public final static String PRODUTO = "Produto";
    //private Popup popup = null;
    private boolean obrigatorio = false;

    public LBConsultaCampo() {
        initComponents();

        popConsulta.add(pnlConsulta);
        popConsulta.setSize(pnlConsulta.getWidth(), pnlConsulta.getHeight());
    }

    public void addEventoConsultaCampoListener(LBEventoConsultaCampoListener listener) {
        listenerList.add(LBEventoConsultaCampoListener.class, listener);
    }

    public void removeEventoConsultaCampoListener(LBEventoConsultaCampoListener listener) {
        listenerList.remove(LBEventoConsultaCampoListener.class, listener);
    }

    void fireEventoAbreTelaConsulta(LBEventoConsultaCampo evt) {
        Object[] listeners = listenerList.getListenerList();

        for (int i = 0; i < listeners.length; i += 2) {
            if (listeners[i] == LBEventoConsultaCampoListener.class) {
                ((LBEventoConsultaCampoListener) listeners[i + 1]).abreTelaConsulta(evt);
            }
        }
    }

    void fireEventoAposConsulta(LBEventoConsultaCampo evt) {
        Object[] listeners = listenerList.getListenerList();

        for (int i = 0; i < listeners.length; i += 2) {
            if (listeners[i] == LBEventoConsultaCampoListener.class) {
                ((LBEventoConsultaCampoListener) listeners[i + 1]).aposConsulta(evt);
            }
        }
    }

    @Override
    public void requestFocus() {
        txtCodigo.requestFocus();
    }

    public void consultar() throws Exception {
        consultar(false);
    }

    public void consultar(boolean i_eventoAposConsulta) throws Exception {
        Statement stm = null;
        ResultSet rst = null;
        StringBuilder sql = null;

        stm = Conexao.createStatement();

        sql = new StringBuilder();
        sql.append("SELECT " + campoId + " AS id, " + campoDescricao + " AS descricao");

        for (LBConsultaCampoRetorno oRetorno : retorno) {
            sql.append(", " + oRetorno.nome);
        }

        sql.append(" FROM " + tabela);
        sql.append(" WHERE " + campoId + " = " + txtCodigo.getText());

        if (!filtro.equals("")) {
            sql.append(" " + filtro);
        }

        if (!tipo.isEmpty()) {
            sql.append(" UNION ALL");
            sql.append(" SELECT " + campoId + " AS id, " + campoDescricao + " AS descricao");

            for (LBConsultaCampoRetorno oRetorno : retorno) {
                sql.append(", " + oRetorno.nome);
            }

            sql.append(" FROM " + tabela);

            if (tipo.equals(FORNECEDOR)) {
                sql.append(" WHERE cnpj = " + txtCodigo.getText());

            } else if (tipo.equals(CLIENTE_EVENTUAL)) {
                sql.append(" WHERE cnpj = " + txtCodigo.getText());

            } else if (tipo.equals(CLIENTE_PREFERENCIAL)) {
                sql.append(" WHERE cnpj = " + txtCodigo.getText());

            } else if (tipo.equals(MOTORISTA)) {
                sql.append(" WHERE cpf = " + txtCodigo.getText());

            } else if (tipo.equals(PRODUTO)) {
                sql.append(" WHERE " + campoId + " IN (SELECT id_produto FROM produtoautomacao WHERE codigobarras = " + txtCodigo.getText() + ")");
            }

            if (!filtro.equals("")) {
                sql.append(" " + filtro);
            }
        }

        rst = stm.executeQuery(sql.toString());

        if (!rst.next()) {
            txtDescricao.setText("");
            codigoBarras = 0;
            throw new LBException(Util.MSG_REGISTRO_NAO_ENCONTRADO);
        }

        if (tipo.isEmpty()) {
            if (getColumns() > 0) {
                txtCodigo.setText(Util.formatNumber(rst.getInt("id"), getColumns()));
            }
        } else if (tipo.equals(FORNECEDOR)) {
            txtCodigo.setText(Util.formatNumber(rst.getInt("id"), 6));

        } else if (tipo.equals(CLIENTE_EVENTUAL)) {
            txtCodigo.setText(Util.formatNumber(rst.getInt("id"), 6));

        } else if (tipo.equals(CLIENTE_PREFERENCIAL)) {
            txtCodigo.setText(Util.formatNumber(rst.getInt("id"), 6));

        } else if (tipo.equals(MOTORISTA)) {
            txtCodigo.setText(Util.formatNumber(rst.getInt("id"), 6));

        } else if (tipo.equals(PRODUTO)) {
            codigoBarras = txtCodigo.getLong();
            txtCodigo.setText(Util.formatNumber(rst.getInt("id"), 6));
        }

        txtDescricao.setText(rst.getString("descricao"));

        for (LBConsultaCampoRetorno oRetorno : retorno) {
            if (oRetorno.tipo == BOOLEAN) {
                oRetorno.valor = rst.getBoolean(oRetorno.nome);
            } else if (oRetorno.tipo == DOUBLE) {
                oRetorno.valor = rst.getDouble(oRetorno.nome);
            } else if (oRetorno.tipo == INT) {
                oRetorno.valor = rst.getInt(oRetorno.nome);
            } else if (oRetorno.tipo == DATA) {
                oRetorno.valor = rst.getDate(oRetorno.nome);
            } else if (oRetorno.tipo == LONG) {
                oRetorno.valor = rst.getLong(oRetorno.nome);
            } else if (oRetorno.tipo == STRING) {
                oRetorno.valor = rst.getString(oRetorno.nome);
            } else {
                oRetorno.valor = rst.getString(oRetorno.nome);
            }
        }

        stm.close();

        if (i_eventoAposConsulta) {
            fireEventoAposConsulta(new LBEventoConsultaCampo(this));
        }
    }

    public void clearRetorno() throws Exception {
        this.retorno.clear();
    }

    public void addRetorno(String i_nome, int i_tipo) throws Exception {
        LBConsultaCampoRetorno oRetorno = new LBConsultaCampoRetorno();
        oRetorno.nome = i_nome;
        oRetorno.tipo = i_tipo;

        this.retorno.add(oRetorno);
    }

    public void setCodigoBarras(Long i_value)throws Exception {
        codigoBarras = i_value;
        txtCodigo.setText(String.valueOf(codigoBarras));
    }

    public long getCodigoBarras() throws Exception {
        return codigoBarras;
    }

    public boolean getBoolean(String i_nome) throws Exception {
        Boolean valor = (Boolean) getRetorno(i_nome);
        return valor.booleanValue();
    }

    public double getDouble(String i_nome) throws Exception {
        Double valor = (Double) getRetorno(i_nome);
        return valor.doubleValue();
    }

    public int getInt(String i_nome) throws Exception {
        Integer valor = (Integer) getRetorno(i_nome);
        return valor.intValue();
    }

    public long getLong(String i_nome) throws Exception {
        Long valor = (Long) getRetorno(i_nome);
        return valor.longValue();
    }

    public String getString(String i_nome) throws Exception {
        String valor = (String) getRetorno(i_nome);
        return valor;
    }

    public String getData(String i_data) throws Exception {
        if (getRetorno(i_data) == null) {
            return "";
        } else {
            return new SimpleDateFormat("dd/MM/yyyy").format(getRetorno(i_data));
        }
    }

    private Object getRetorno(String i_nome) throws Exception {
        for (LBConsultaCampoRetorno oRetorno : retorno) {
            if (oRetorno.nome.equals(i_nome)) {
                return oRetorno.valor;
            }
        }

        return null;
    }

    public void clear() throws Exception {
        txtCodigo.setText("");
        txtDescricao.setText("");
    }

    @Override
    public void transferFocus() {
        txtCodigo.transferFocus();
    }

    @Override
    public synchronized void addFocusListener(FocusListener l) {
        txtCodigo.addFocusListener(l);
    }

    @Override
    public synchronized void addKeyListener(KeyListener l) {
        txtCodigo.addKeyListener(l);
    }

    public void setParentSelected(boolean i_valor) throws Exception {
        Container oContainer = getParent();

        int i = 0;

        while (true) {
            oContainer = oContainer.getParent();

            if (oContainer instanceof LBInternalFrame) {
                ((LBInternalFrame) oContainer).setSelected(i_valor);
                break;
            }

            if (i > 10) {
                break;
            }

            i++;
        }
    }

    public String getCampoId() {
        return campoId;
    }

    public void setCampoId(String campoId) {
        this.campoId = campoId;
    }

    public String getCampoDescricao() {
        return campoDescricao;
    }

    public void setCampoDescricao(String campoDescricao) {
        this.campoDescricao = campoDescricao;
    }

    public String getTabela() {
        return tabela;
    }

    public void setTabela(String tabela) {
        this.tabela = tabela;
    }

    public void setWidth(int tamanho) {
        txtDescricao.setSize(tamanho, 20);
    }

    public String getFiltro() {
        return filtro;
    }

    public void setFiltro(String filtro) {
        this.filtro = filtro;
    }

    public int getId() throws Exception {
        if (txtCodigo.getText().isEmpty()) {
            return -1;
        } else {
            try {
                return txtCodigo.getInt();

            } catch (Exception ex) {
                return -1;
            }
        }
    }

    public String getDescricao() {
        return txtDescricao.getText();
    }

    public void setDescricao(String i_descricao) {
        txtDescricao.setText(i_descricao);
    }

    public void setId(int i_id) {
        txtCodigo.setText(String.valueOf(i_id));
    }

    public int getColumns() {
        return this.columns;
    }

    public void setColumns(int i_columns) {
        this.columns = i_columns;
        txtCodigo.setColumns(i_columns);
    }

    @Override
    public void setEnabled(boolean i_enable) {
        txtCodigo.setEnabled(i_enable);
        btnConsultar.setEnabled(i_enable);

        setObrigatorio(obrigatorio);
    }

    @Override
    public boolean isEnabled() {
        return txtCodigo.isEnabled();
    }

    public boolean isTeclaEnter() {
        return txtCodigo.isTeclaEnter();
    }

    public void setTeclaEnter(boolean teclaEnter) {
        txtCodigo.setTeclaEnter(teclaEnter);
    }

    public String getTipo() {
        return tipo;
    }

    public void setTipo(String i_tipo) {
        this.tipo = i_tipo;

        if (i_tipo.equals(FORNECEDOR)) {
            tabela = "fornecedor";
            campoId = "id";
            campoDescricao = "razaosocial";
            txtCodigo.setColumns(14);

        } else if (i_tipo.equals(CLIENTE_EVENTUAL)) {
            tabela = "clienteeventual";
            campoId = "id";
            campoDescricao = "nome";
            txtCodigo.setColumns(14);

        } else if (i_tipo.equals(CLIENTE_PREFERENCIAL)) {
            tabela = "clientepreferencial";
            campoId = "id";
            campoDescricao = "nome";
            txtCodigo.setColumns(14);

        } else if (i_tipo.equals(MOTORISTA)) {
            tabela = "motorista";
            campoId = "id";
            campoDescricao = "nome";
            txtCodigo.setColumns(11);

        } else if (i_tipo.equals(PRODUTO)) {
            tabela = "produto";
            campoId = "id";
            campoDescricao = "descricaocompleta";
            txtCodigo.setColumns(14);
        }
    }

//    private boolean pesquisarDescricao() throws Exception {
//        Statement stm = null;
//        ResultSet rst = null;
//        StringBuilder sql = null;
//
//        popConsulta.show(this, txtCodigo.getX(), txtCodigo.getY() + txtCodigo.getHeight());
//
//        Vector<ConsultaVO> vConsulta = new Vector();
//
//        stm = Conexao.createStatement();
//
//        sql = new StringBuilder();
//        sql.append("SELECT " + campoId + " AS id, " + campoDescricao + " AS descricao");
//        sql.append(" FROM " + tabela);
//        sql.append(" WHERE " + Util.getGoogle(campoDescricao, pesquisa.toUpperCase()));
//
//        rst = stm.executeQuery(sql.toString());
//
//        while (rst.next()) {
//            ConsultaVO oProduto = new ConsultaVO();
//            oProduto.id = rst.getInt("id");
//            oProduto.descricao = rst.getString("descricao");
//
//            vConsulta.add(oProduto);
//        }
//
//        stm.close();
//
//        LBColumnTable[] colunas = new LBColumnTable[]{
//            new LBColumnTable("Código", 70, true, SwingConstants.LEFT, false, null),
//            new LBColumnTable("Descrição", 280, true, SwingConstants.LEFT, false, null)
//        };
//
//        Object[][] dados = new Object[vConsulta.size()][colunas.length];
//
//        int i = 0;
//
//        for (ConsultaVO oConsulta : vConsulta) {
//            dados[i][0] = Util.formatNumber(oConsulta.id, 6);
//            dados[i][1] = oConsulta.descricao;
//
//            i++;
//        }
//
//        tblConsulta.setModel(dados, colunas);
//        tblConsulta.requestFocus();
//
//        if (vConsulta.size() > 0) {
//            return true;
//        } else {
//            return false;
//        }
//    }

//    private void showToolTip(boolean i_achou) {
//        JToolTip tip = this.createToolTip();
//        tip.setTipText("Procurar por: " + pesquisa);
//
//        if (i_achou) {
//            tip.setForeground(UIManager.getColor("ToolTip.foreground"));
//        } else {
//            tip.setForeground(Color.RED);
//        }
//
//        closeToolTip();
//
//        Point p = tblConsulta.getParent().getLocationOnScreen();
//
//        PopupFactory popupFactory = PopupFactory.getSharedInstance();
//        popup = popupFactory.getPopup(tblConsulta.getParent(), tip, p.x, p.y - 15);
//        popup.show();
//    }

//    private void closeToolTip() {
//        if (popup != null) {
//            popup.hide();
//        }
//    }

    public boolean isObrigatorio() {
        return obrigatorio;
    }

    public void setObrigatorio(boolean obrigatorio) {
        this.obrigatorio = obrigatorio;

        if (txtCodigo.isEnabled()) {
            if (obrigatorio) {
                txtCodigo.setBackground(Util.COR_OBRIGATORIO);
            } else {
                txtCodigo.setBackground(UIManager.getColor("TextField.background"));                
            }
        } else {
            txtCodigo.setBackground(UIManager.getColor("TextField.disabledBackground"));            
        }
    }

    @Override
    public boolean isFocusOwner(){
        return txtCodigo.isFocusOwner();
    }

    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        pnlConsulta = new lbframework.bean.panel.LBPanel();
        jScrollPane1 = new javax.swing.JScrollPane();
        tblConsulta = new lbframework.bean.table.LBTable();
        popConsulta = new javax.swing.JPopupMenu();
        txtCodigo = new lbframework.bean.textField.LBTextField();
        btnConsultar = new lbframework.bean.button.LBButton();
        txtDescricao = new lbframework.bean.textField.LBTextField();

        pnlConsulta.setBorder(null);

        jScrollPane1.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));

        tblConsulta.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {

            }
        ));
        tblConsulta.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                tblConsultaFocusLost(evt);
            }
        });
        tblConsulta.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                tblConsultaKeyPressed(evt);
            }
        });
        jScrollPane1.setViewportView(tblConsulta);

        javax.swing.GroupLayout pnlConsultaLayout = new javax.swing.GroupLayout(pnlConsulta);
        pnlConsulta.setLayout(pnlConsultaLayout);
        pnlConsultaLayout.setHorizontalGroup(
            pnlConsultaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 371, Short.MAX_VALUE)
        );
        pnlConsultaLayout.setVerticalGroup(
            pnlConsultaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 311, Short.MAX_VALUE)
        );

        popConsulta.setBorder(null);

        setBorder(null);
        addHierarchyBoundsListener(new java.awt.event.HierarchyBoundsListener() {
            public void ancestorMoved(java.awt.event.HierarchyEvent evt) {
            }
            public void ancestorResized(java.awt.event.HierarchyEvent evt) {
                formAncestorResized(evt);
            }
        });
        addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                formFocusLost(evt);
            }
        });

        txtCodigo.setMascara("Numero");
        txtCodigo.setMinimumSize(new java.awt.Dimension(64, 20));
        txtCodigo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                txtCodigoActionPerformed(evt);
            }
        });
        txtCodigo.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                txtCodigoFocusLost(evt);
            }
        });
        txtCodigo.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                txtCodigoKeyPressed(evt);
            }
            public void keyTyped(java.awt.event.KeyEvent evt) {
                txtCodigoKeyTyped(evt);
            }
        });

        btnConsultar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/lbframework/bean/consultaCampo/consultaCampo16.png"))); // NOI18N
        btnConsultar.setToolTipText("Abrir tela consulta (F9)");
        btnConsultar.setFocusable(false);
        btnConsultar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnConsultarActionPerformed(evt);
            }
        });

        txtDescricao.setAlignmentY(4.99999998E11F);
        txtDescricao.setEnabled(false);
        txtDescricao.setMinimumSize(new java.awt.Dimension(0, 20));
        txtDescricao.setSelecionaTexto(false);
        txtDescricao.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                txtDescricaoFocusLost(evt);
            }
        });
        txtDescricao.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                txtDescricaoKeyReleased(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(txtCodigo, javax.swing.GroupLayout.PREFERRED_SIZE, 64, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(btnConsultar, javax.swing.GroupLayout.PREFERRED_SIZE, 24, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(txtDescricao, javax.swing.GroupLayout.DEFAULT_SIZE, 267, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(btnConsultar, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addComponent(txtDescricao, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addComponent(txtCodigo, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
        );
    }// </editor-fold>//GEN-END:initComponents
    private void btnConsultarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnConsultarActionPerformed
        try {
            clear();
            fireEventoAbreTelaConsulta(new LBEventoConsultaCampo(this));

        } catch (Exception ex) {
            Util.exibirMensagemErro(ex, "Atenção");
        }
}//GEN-LAST:event_btnConsultarActionPerformed

    private void txtCodigoFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_txtCodigoFocusLost
        try {
            if (txtCodigo.getText().equals("")) {
                clear();

            } else {
                consultar(true);
            }

        } catch (Exception ex) {
            Util.exibirMensagemErro(ex, "Atenção");

            Runnable doFocus = new Runnable() {

                public void run() {
                    txtCodigo.requestFocus();
                }
            };

            SwingUtilities.invokeLater(doFocus);
        }
    }//GEN-LAST:event_txtCodigoFocusLost

    private void formFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_formFocusLost
    }//GEN-LAST:event_formFocusLost

    private void txtCodigoKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtCodigoKeyPressed
        try {
            if (evt.getKeyCode() == KeyEvent.VK_F9) {
                clear();
                fireEventoAbreTelaConsulta(new LBEventoConsultaCampo(this));
            }

        } catch (Exception ex) {
            Util.exibirMensagemErro(ex, "Atenção");
        }
    }//GEN-LAST:event_txtCodigoKeyPressed

    private void txtCodigoKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtCodigoKeyTyped
    }//GEN-LAST:event_txtCodigoKeyTyped

    private void txtCodigoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txtCodigoActionPerformed
    }//GEN-LAST:event_txtCodigoActionPerformed

    private void formAncestorResized(java.awt.event.HierarchyEvent evt) {//GEN-FIRST:event_formAncestorResized
    }//GEN-LAST:event_formAncestorResized

    private void txtDescricaoKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtDescricaoKeyReleased
    }//GEN-LAST:event_txtDescricaoKeyReleased

    private void txtDescricaoFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_txtDescricaoFocusLost
    }//GEN-LAST:event_txtDescricaoFocusLost

    private void tblConsultaKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_tblConsultaKeyPressed
        try {
            if ((evt.getKeyCode() >= KeyEvent.VK_A && evt.getKeyCode() <= KeyEvent.VK_Z) || (evt.getKeyCode() == KeyEvent.VK_SPACE)) {
//                pesquisa += evt.getKeyChar();
                txtCodigo.setText("");

//                 pesquisarDescricao();

            } else if (evt.getKeyCode() == KeyEvent.VK_BACK_SPACE) {
//                if (pesquisa.length() > 0) {
//                    pesquisa = pesquisa.substring(0, pesquisa.length() - 1);
//                }
//
//                pesquisarDescricao();

            } else if (evt.getKeyCode() == KeyEvent.VK_ESCAPE) {
                txtCodigo.requestFocus();
                popConsulta.setVisible(false);
//                pesquisa = "";

            } else if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
                txtCodigo.setText((String) tblConsulta.getValueAt(tblConsulta.getLinhaSelecionada(), 0));
                txtCodigo.requestFocus();

                popConsulta.setVisible(false);
//                pesquisa = "";

                txtCodigo.transferFocus();
            }

        } catch (Exception ex) {
            Util.exibirMensagemErro(ex, "Atenção");
        }
}//GEN-LAST:event_tblConsultaKeyPressed

    private void tblConsultaFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_tblConsultaFocusLost
}//GEN-LAST:event_tblConsultaFocusLost
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private lbframework.bean.button.LBButton btnConsultar;
    private javax.swing.JScrollPane jScrollPane1;
    private lbframework.bean.panel.LBPanel pnlConsulta;
    private javax.swing.JPopupMenu popConsulta;
    private lbframework.bean.table.LBTable tblConsulta;
    private lbframework.bean.textField.LBTextField txtCodigo;
    private lbframework.bean.textField.LBTextField txtDescricao;
    // End of variables declaration//GEN-END:variables

    private class LBConsultaCampoRetorno {

        public Object valor = null;
        public String nome = "";
        public int tipo = 0;
    }

    private class ConsultaVO {

        int id = 0;
        String descricao = "";
    }
}
